package com.mycompany.dao;

import java.util.Calendar;
import java.util.List;

import javax.sql.DataSource;

import org.hibernate.Criteria;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

import com.mycompany.common.JFConstantes;
import com.mycompany.dao.hibernate.GenericDaoHibernate;
import com.mycompany.domain.Almacen;;

@Repository("almacenDao")
public class AlmacenDaoImpl extends GenericDaoHibernate<Almacen, Integer>
	implements AlmacenDao{

	public AlmacenDaoImpl() {
		super(Almacen.class);
	}
	
	private JdbcTemplate jdbcTemplate;
	
	@Autowired
	public void setJdbcTemplate(DataSource dataSource) {
		this.jdbcTemplate = new JdbcTemplate(dataSource);
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Almacen> obtenerAlmacenes() {
		Criteria criteria=DetachedCriteria.forClass(Almacen.class).
				getExecutableCriteria(getSessionFactory().getCurrentSession());
		
		criteria.setMaxResults(JFConstantes.MAXIMO_RESULTADO_INICIAL);
		criteria.add(Restrictions.eq("almestado_c", Boolean.TRUE));
		criteria.addOrder(Order.desc("almcodigo_i"));
		
		List<Almacen> lista=criteria.list();
		return lista;
	}

	@Override
	public void guardarAlmacen(Almacen almacen) {
		if(almacen.getAlmCodigoI()==null){
			almacen.setUsuarioRegistra(getUsuarioLogueado().getUsername());
			almacen.setFechaRegistra(Calendar.getInstance());
			almacen.setAlmEstadoC("A");
		}else{
			almacen.setUsuarioModifica(getUsuarioLogueado().getUsername());
			almacen.setFechaModifica(Calendar.getInstance());
		}
		getHibernateTemplate().saveOrUpdate(almacen);
		getHibernateTemplate().flush();
	}

	@Override
	public Almacen obtenerAlmacen(Integer codigo) {
		Almacen almacen=get(codigo);
		return almacen;
	}

	@Override
	public void eliminarAlmacen(Integer codigo) {
		remove(codigo);
		getHibernateTemplate().flush();
	}

	@Override
	public boolean esAlmacenConDependencias(Integer codigo) {
		// TODO Auto-generated method stub
		return false;
	}

}
